﻿// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include "CoreMinimal.h"
#include "GameplayTagContainer.h"
#include "Engine/DataAsset.h"
#include "StarrySkyInputConfig.generated.h"

/**
 * 蓝图类型的枚举，用于存储输入动作和输入标签。可以通过输入游戏标签来触发输入动作。
 */
USTRUCT(BlueprintType)
struct  FStarrySkyInputAction
{
	GENERATED_BODY()
	/*
	*	const 意味着运行时不能被修改
	*	class 是做到前置声明，但是运行时才被初始化，所以可以修改
	*	UPROPERTY(EditDefaultsOnly) 在默认配置中，可以修改，但是运行时不能修改
	*/
	UPROPERTY(EditDefaultsOnly)
	const class UInputAction* InputAction = nullptr;

	//没有使用指针或者引用，所以需要引入GameplayTagContainer.h
	UPROPERTY(EditDefaultsOnly)
	FGameplayTag InputTag=FGameplayTag();
};
/**
 * 
 */
UCLASS()
class STARRYSKY_API UStarrySkyInputConfig : public UDataAsset
{
	GENERATED_BODY()
public:
	// 通过游戏标签找到输入动作
	const UInputAction* FindAbilityInputActionForTag(const FGameplayTag& InputTag, bool bLogNotFound=false) const;
	
	//数据资产中存储的输入动作和输入标签结构体的列表
	UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)
	TArray<FStarrySkyInputAction> AbilityInputActions;
};
